import os

import ocr_modules.gcp.gcp as gcp
import ocr_modules.pytesseract.pytesseract_ocr as pytesseract
import utils.fsutils as fsutils
from image_process_modules.binarization import binarization
from image_process_modules.resize_to_4kx3k import resize_to_4kx3k


def w02_single_table_image_to_boxes(filepath):
    # 1. 调整大小
    # 获取文件名（不包含路径，带后缀）
    file_name_ = os.path.basename(filepath)
    # 获取文件名(不带后缀）
    file_name, ext_types = os.path.splitext(file_name_)
    # 获取缓存路径下的“分隔后的表图片”分类目录，用于存放分割后的单个表格图片
    split_table_dir = fsutils.get_cache_path_for_category("分隔后的表图片")
    # 获取该目录下的所有文件和文件夹名称（逻辑上此处应该都是文件夹，这些文件夹都是用图片名字来命名）
    split_table_dir_list = os.listdir(split_table_dir)
    # 检查是否已经存在以当前文件名命名的文件夹，如果存在，则跳过分割
    for i in split_table_dir_list:
        if file_name in os.path.basename(i):
            print(f"{filepath} 跳过分割，有之前生成的单个表格目录，请检查")
            return
    print("{} 开始处理".format(filepath))

    # 构建 4kx3k 大小的图像路径
    path4kx3k = os.path.join(fsutils.get_cache_path_for_category("4kx3k"), file_name_)
    # 调整图像大小为 4kx3k 分辨率
    resize_to_4kx3k(filepath, path4kx3k)

    # 2. 转换为二进制图像
    # 构建二进制图像路径
    bin_image_path = os.path.join(fsutils.get_cache_path_for_category("binary"), file_name_)
    # 将 4kx3k 图像转换为二进制格式
    binarization(path4kx3k, bin_image_path)

    # 3. OCR
    ocr_engines = [
        'pytesseract']
    for engine in ocr_engines:
        if engine == 'gcp':
            gcp.ocr(bin_image_path)
        elif engine == "pytesseract":
            pytesseract.ocr(bin_image_path)
        else:
            raise Exception("未知的 OCR 引擎 : {}".format(engine))
